package com.ai.aichat.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * <p>
 * 消息表
 * </p>
 *
 * @author baomidou
 * @since 2025-09-16
 */
@Data
@ApiModel(value = "Messages对象", description = "消息表")
public class Messages implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 消息ID
     */
    @ApiModelProperty("消息ID")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 消息UUID
     */
    @ApiModelProperty("消息UUID")
    private String uuid;

    /**
     * 对话ID
     */
    @ApiModelProperty("对话ID")
    private Long conversationId;

    /**
     * 消息角色
     */
    @ApiModelProperty("消息角色")
    private String role;

    /**
     * 消息内容
     */
    @ApiModelProperty("消息内容")
    private String content;

    /**
     * 内容类型
     */
    @ApiModelProperty("内容类型")
    private String contentType;

    /**
     * 生成模型（仅AI消息）
     */
    @ApiModelProperty("生成模型（仅AI消息）")
    private String model;

    /**
     * Token数量
     */
    @ApiModelProperty("Token数量")
    private Integer tokenCount;

    /**
     * 父消息ID（用于消息树）
     */
    @ApiModelProperty("父消息ID（用于消息树）")
    private Long parentMessageId;

    /**
     * 是否为重新生成
     */
    @ApiModelProperty("是否为重新生成")
    private Boolean isRegenerated;

    /**
     * 用户反馈
     */
    @ApiModelProperty("用户反馈")
    private String feedback;

    /**
     * 反馈原因
     */
    @ApiModelProperty("反馈原因")
    private String feedbackReason;

    /**
     * 元数据（如生成参数等）
     */
    @ApiModelProperty("元数据（如生成参数等）")
    private String metadata;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    private LocalDateTime createdAt;

    /**
     * 更新时间
     */
    @ApiModelProperty("更新时间")
    private LocalDateTime updatedAt;

    /**
     * 软删除时间
     */
    @ApiModelProperty("软删除时间")
    private LocalDateTime deletedAt;
}
